package leetcode_61_80;

import java.util.ArrayList;
import java.util.List;

public class plusOne_66 {
    /**
     * 给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
     * 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
     * 你可以假设除了整数 0 之外，这个整数不会以零开头。
     *
     * @param digits
     * @return
     */
    public int[] plusOne(int[] digits) {
        int carry=0;
        List<Integer>res=new ArrayList<>();  //防止首位进位
        digits[digits.length-1]+=1;
        for(int i=digits.length-1;i>=0;i--){
            int temp=carry+digits[i];
            if(temp>9){
                carry=temp/10;
                res.add(temp%10);
                if(i==0)
                    res.add(1);
            }else{
                res.add(temp);
                carry=0;
            }
        }
        int []ans=new int[res.size()];
        int idx=0;
        for (int i=res.size()-1;i>=0;i--){
            ans[idx++]=res.get(i);
        }
        return ans;
    }

    /**
     *  进位只能等于1
     *  只需要找到加了1，不再进位的地方即可以返回
     * 并且可以利用数组默认值是0的性质
     * 使代码更简洁
     */
    public int[] plusOne2(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i]++;
            digits[i] = digits[i] % 10;
            if (digits[i] != 0) return digits;
        }
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }

}
